<?php

/**
 * 返回array格式数据，否则返回空array
 *
 * @since v1.0.0
 * @author ranj
 * @param $array
 * @return array
 */
function array_check($array){
    if(!array_is($array)){
        return array();
    }
    return $array;
}

/**
 * 判断是否为array 数据
 *
 * @since v1.0.0
 * @author ranj
 * @param array $array
 * @return bool
 */
function array_is($array=array()){
    if(!$array||!is_array($array)){
        return false;
    }
    return true;
}

/**
 * 获取数组第一个Key
 *
 * @since v1.0.0
 * @author ranj
 * @return string|bool 成功：返回具体键，失败时返回false
 */
if(!function_exists('array_key_first')){
    function array_key_first($array){
        if(array_is_empty($array)){
            return false;
        }

        foreach ($array as $k=>$v){
            return $k;
        }

        return false;
    }
}

/**
 * 获取数组最后一个Key
 *
 * @since v1.0.0
 * @author ranj
 * @return string|bool 成功：返回具体键，失败时返回false
 */
if(!function_exists('array_key_last')){
    function array_key_last($array){
        if(array_is_empty($array)){
            return false;
        }

        $lastK = false;
        foreach ($array as $k=>$v){
            $lastK = $k;
        }

        return $lastK;
    }
}

/**
 * 判断数组是否是空数组
 *
 * @since v1.0.0
 * @author ranj
 * @param array $array
 * @return bool
 */
function array_is_empty($array=array()){
    if(!array_is($array)){
        return true;
    }
    return !count($array);
}

/**
 * 判断数组中是否存在
 * @param $array
 * @param $call
 * @return bool
 */
function array_any($array=array(),$call=null){
    if(array_is_empty($array)){
        return false;
    }

    foreach ($array as $key=>$item){
        if(!$call){
            return true;
        }else if(call_user_func_array($call,array($item,$key))){
            return true;
        }
    }

    return false;
}

/**
 * 循环替换数组内的数据
 *
 * @since v1.0.0
 * @author ranj
 * @param array $array
 * @param null $call
 * @return array
 */
function array_replace2($array=array(),$call=null){
    if(array_is_empty($array)){
        return $array;
    }

    $newArray = array();
    foreach ($array as $key=>$item){
        if(!$call){
            $newArray[$key]= $item;
        }else{
            $newArray[$key]= call_user_func_array($call,array($item,$key));
        }
    }
    return $newArray;
}

/**
 * 过滤数组中的数据
 *
 * @since v1.0.0
 * @author ranj
 * @param array $array
 * @param null $call
 * @return array
 */
function array_filter2($array=array(),$call=null){
    if(array_is_empty($array)){
        return $array;
    }

    $newArray = array();
    foreach ($array as $key=>$item){
        if(!$call){
            $newArray[$key]= $item;
        }else if(call_user_func_array($call,array($item,$key))){
            $newArray[$key]= $item;
        }
    }
    return $newArray;
}

/**
 * 获取数组中第一个元素的value
 *
 * @since v1.0.0
 * @author ranj
 * @param array $array
 * @param null $call
 * @return mixed|null
 */
function array_first($array=array(),$call=null){
    if(array_is_empty($array)){
        return null;
    }

    foreach ($array as $key=>$item){
        if(!$call){
            return $item;
        }else if(call_user_func_array($call,array($item,$key))){
            return $item;
        }
    }

    return null;
}

/**
 * 根据值 查询是否在二维数组中
 *@param $value  需要查找的值
 *@param $array  查找的二维数组
 */
function deep_in_array($value, $array) {
    foreach($array as $item) {
        if(!is_array($item)) {
            if ($item == $value) {
                return true;
            } else {
                continue;
            }
        }

        if(in_array($value, $item)) {
            return true;
        } else if(deep_in_array($value, $item)) {
            return true;
        }
    }
    return false;
}

/**
 * 按照 字母 分组 并 排序
 *
 * @param {Array} $list ; 需要 排序的 数据， 一维数组
 * @param {string} $field ; 排序 需要 依据 的字段，该字段 必须为 拼音
 */

function data_letter_sort($list, $field)
{

    $resault = array();

    foreach ($list as $key => $val) {

        // 添加 # 分组，用来 存放 首字母不能 转为 大写英文的 数据

        $resault['#'] = array();

        // 首字母 转 大写英文

        $letter = strtoupper(substr($val[$field], 0, 1));

        // 是否 大写 英文 字母

        if (!preg_match('/^[A-Z]+$/', $letter)) {

            $letter = '#';

        }

        // 创建 字母 分组

        if (!array_key_exists($letter, $resault)) {

            $resault[$letter] = array();

        }

        // 字母 分组 添加 数据

        Array_push($resault[$letter], $val);

    }

    // 依据 键名 字母 排序，该函数 返回 boolean

    ksort($resault);

    // 将 # 分组 放到 最后

    $arr_last = $resault['#'];

    unset($resault['#']);



    if(!empty($arr_last)){
        $resault['#'] = $arr_last;
    }

    return $resault;

}

function object_array($array) {
    if(is_object($array)) {
        $array = (array)$array;
    } if(is_array($array)) {
        foreach($array as $key=>$value) {
            $array[$key] = object_array($value);
        }
    }
    return $array;
}
/**
 * 日期时间分割
 */
function date_time_division($time,$type="date"){
    $time_arr = explode(' - ', $time);
    switch ($type){
        case "date":
            return  [$time_arr[0] . " 00:00:00", $time_arr[1] . " 23:59:59"];
        case "time":
            return  [$time_arr[0] , $time_arr[1]];
    }
}

